﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace calculadora
{
    
    public partial class Form1 : Form
    {
        public OP op;
        Double result;
        Boolean limpar = false;
        public Form1()
        {
            InitializeComponent();
        }

        void add(String text)
        {
            textFormula.Text += ' '+text;
        }

        void escreve(String text) {
            if (textResultado.Text != "0")
                textResultado.Text += text;
            else
                textResultado.Text = text;
        }

        void resultado() {
            if (op != null)
            {
                op.b = Double.Parse(textResultado.Text);
                add(textResultado.Text);
                textResultado.Text = op.result().ToString();
                result = op.result();
                op = null;
               
            }
            textFormula.Clear();
            limpar = true;
        }
        private void button22_Click(object sender, EventArgs e)
        {
            
        }

        private void button11_Click(object sender, EventArgs e)
        {
            if (op == null)
            {
                  resultado();
                  op = new Adicao();
                  op.a = Double.Parse(textResultado.Text);
                  add(textResultado.Text + " + ");
                  textResultado.Text = "0";
            }
            else {
                resultado();
                op = new Adicao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + " + ");
                textResultado.Text = "0";    
            }
           
        }

       

        private void button3_Click(object sender, EventArgs e)
        {
            textResultado.Text = (new Pi()).result().ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            resultado();
            add("seno("+textResultado.Text+")");
            textResultado.Text = (new Seno(double.Parse(textResultado.Text))).result().ToString();
        }

       
        private void button25_Click(object sender, EventArgs e)
        {
            if (limpar)
                textResultado.Clear();
            limpar = false;
            escreve(((Button)sender).Text);
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void button27_Click(object sender, EventArgs e)
        {
            resultado();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            resultado();
            add("tan(" + textResultado.Text + ")");
            textResultado.Text = (new Tangente(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button15_Click(object sender, EventArgs e)
        {
            resultado();
            add("coseno(" + textResultado.Text + ")");
            textResultado.Text = (new Coseno(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button28_Click(object sender, EventArgs e)
        {
            resultado();
            add("log(" + textResultado.Text + ")");
            textResultado.Text = (new Log(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button10_Click(object sender, EventArgs e)
        {
            resultado();
            add("raiz(" + textResultado.Text + ")");
            textResultado.Text = (new raiz(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button8_Click(object sender, EventArgs e)
        {

        }

        private void button9_Click(object sender, EventArgs e)
        {
            resultado();
            add("n!(" + textResultado.Text + ")");
            textResultado.Text = (new Fatorial(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button7_Click(object sender, EventArgs e)
        {
            resultado();
            add("(10^" + textResultado.Text + ")");
            textResultado.Text = (new DezX(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            resultado();
            add("("+ textResultado.Text + "^2)");
            textResultado.Text = (new XQuadrado(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (op == null)
            {
                resultado();
                op = new XY();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "^");
                textResultado.Text = "0";
            }
            else
            {
                resultado();
                op = new XY();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "^");
                textResultado.Text = "0";
            }
           
        }

        private void button5_Click(object sender, EventArgs e)
        {
            resultado();
            add("(" + textResultado.Text + "^3)");
            textResultado.Text = (new XCubo(double.Parse(textResultado.Text))).result().ToString();
        }

        private void button12_Click(object sender, EventArgs e)
        {
            if (op == null)
            {
                resultado();
                op = new Subtracao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "-");
                textResultado.Text = "0";
            }
            else
            {
                resultado();
                op = new Subtracao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "-");
                textResultado.Text = "0";
            }
        }

        private void button13_Click(object sender, EventArgs e)
        {
            if (op == null)
            {
                resultado();
                op = new Multiplicacao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "*");
                textResultado.Text = "0";
            }
            else
            {
                resultado();
                op = new Multiplicacao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "*");
                textResultado.Text = "0";
            }
        }

        private void button14_Click(object sender, EventArgs e)
        {
            if (op == null)
            {
                resultado();
                op = new Divisao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "/");
                textResultado.Text = "0";
            }
            else
            {
                resultado();
                op = new Divisao();
                op.a = Double.Parse(textResultado.Text);
                add(textResultado.Text + "/");
                textResultado.Text = "0";
            }
        }
    }
}
